package files;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Arrays;
import java.util.Collections;
import java.util.Scanner;

import de.dnb.gnd.parser.Indicator;
import de.dnb.gnd.parser.tag.DefaultGNDTag;

public class MachGNDTag {

	static final int WIEDERH = 0;

	static final int P3 = 1;

	static final int P_PLUS = 2;

	static final int TAG_BESCHR = 3;

	static final int INDIKATOR = 4;

	static final int PRAEFIX = 5;

	static final int UF_BESCHR = 7;

	static final int VERWANDT = 8;

	private static final String KOMMA = ", ";

	/**
	 * @param args
	 * @throws IOException
	 */
	public static void main(String[] args) throws IOException {
		File source = new File("src/docs/GND.txt");
		Scanner scanner = new Scanner(source);
		while (scanner.hasNext()) {
			String line = scanner.nextLine();
			String[] spalten = line.split("\t");
			// System.out.println(Arrays.asList(spalten));
			if (spalten[1].contains("bis"))
				verarbeiteBis();
			else if (spalten.length == UF_BESCHR + 1)
				verarbeiteUF(spalten);
			else if (spalten.length == VERWANDT + 1)
				verabeiteVerw(spalten);
			else
				verarbeiteTag(spalten);

			// System.out.println("------------");

		}
	}

	private static void verarbeiteBis() {
		System.out.println("// TODO: bis");

	}

	private static void verabeiteVerw(String[] spalten) {
		// System.out.println(spalten[VERWANDT]);
		System.out.println("inheritedTag = getPica3(\"" + spalten[VERWANDT]
				+ "\");");
		System.out.println("newGndTag.addInherited(inheritedTag);");
	}

	private static void verarbeiteUF(String[] spalten) {
		// System.out.println(spalten[WIEDERH]);
		// System.out.println(spalten[INDIKATOR]);
		// System.out.println(spalten[PRÄFIX]);
		// System.out.println(spalten[UF_BESCHR]);
		boolean ohne = false;
		if (spalten[PRAEFIX].contains("ohne"))
			ohne = true;
		String out;
		if (ohne)
			out = "newGndTag.addDefaultFirst(new Indicator(";
		else
			out = "newGndTag.add(new Indicator(";
		if (!spalten[PRAEFIX].isEmpty() && !ohne) {
			out += spalten[PRAEFIX] + KOMMA + "\"\"" + KOMMA;
		}
		out += "\'" + spalten[INDIKATOR].charAt(1) + "\'" + KOMMA;
		String ufBeschr = bereinige(spalten[UF_BESCHR]);
		out += "\"" + ufBeschr + "\"" + KOMMA;
		if (spalten[WIEDERH].contains("*"))
			out += "R";
		else
			out += "NR";
		out += KOMMA + "\"\"));";
		System.out.println(out);
	}

	private static void verarbeiteTag(String[] spalten) {
		System.out.println();
		String out = "newGndTag = new DefaultGNDTag(\"";
		out += spalten[P3] + "\"" + KOMMA;
		out += "\"" + spalten[P_PLUS] + "\"" + KOMMA;
		String tagBeschr = bereinige(spalten[TAG_BESCHR]);
		out += "\"" + tagBeschr + "\"" + KOMMA;
		if (spalten[WIEDERH].contains("*"))
			out += "R";
		else
			out += "NR";
		out += KOMMA + "\"\", \"\");";
		System.out.println(out);
		System.out.println("addTag(newGndTag);");
	}

	private static String bereinige(String string) {
		return string.replace("\"", "\\\"");
	}

}
